package com.cl.pattern.visitor;

import java.util.LinkedList;
import java.util.List;

/**
 * 员工业务报表类
 * ObjectStructure：定义当中所提到的对象结构
 */

public class BusinessReport {


    /**
     * 对象结构拥有元素的所有引用
     */
    private List<Staff> mStaffs = new LinkedList<Staff>();

    public BusinessReport() {
        mStaffs.add(new Manager("产品经理-小叶"));
        mStaffs.add(new Engineer("Java工程师-小张"));
        mStaffs.add(new Engineer("Java工程师-小赵"));
        mStaffs.add(new Engineer("PHP工程师-小李"));
        mStaffs.add(new Manager("产品经理-小花"));
        mStaffs.add(new Engineer("NET工程师-小伟"));
    }


    /**
     * 添加元素
     * @param staff
     */
    public void  addElement(Staff staff){
        this.mStaffs.add(staff);
    }

    /**
     * 去除元素
     * @param staff
     */
    public void  removeElement(Staff staff){
        this.mStaffs.remove(staff);
    }

    /**
     * 为访问者展示报表
     * @param visitor 公司高层，如CEO、CTO
     */
    public void showReport(Visitor visitor) {
        for (Staff staff : mStaffs) {
            staff.accept(visitor);
        }
    }
}